import MySQLdb
from pprint import pprint


########################################################
# 数据库操作 ：
#  cmd : pip install mysqlclient==1.3.12
#      报错,需要升级pip
########################################################
class DBOperator():
    __con = None

    # 初始化，连接数据库
    def __init__(self,
                 host,  # 地址
                 port,  # 端口
                 username,  # 用户名
                 passwd,  # 密码
                 db,  # 哪一个数据库
                 charset  # 编码 如 utf8
                 ):
        self.__con = self.connectiondb(host,  # 地址
                                       port,  # 端口
                                       username,  # 用户名
                                       passwd,  # 密码
                                       db,  # 哪一个数据库
                                       charset  # 编码 如 utf8
                                       )

    # 连接数据库
    def connectiondb(self,
                     host,  # 地址
                     port,  # 端口
                     username,  # 用户名
                     passwd,  # 密码
                     db,  # 哪一个数据库
                     charset  # 编码 如 utf8
                     ):
        return MySQLdb.connect(
            host=host,
            port=port,
            user=username,
            passwd=passwd,
            db=db,
            charset=charset
        )

    # 读取信息 fetchall 数据量大会僵死
    def getTableData(self, sql):
        rows = []
        c = self.__con.cursor()
        try:
            c.execute(sql)
            for i in range(c.rowcount):
                # row = c.fetchone() # 一次读一个
                row = c.fetchmany(10)  # 一次读多条
                if not row:
                    continue
                rows.append(row)
            return rows
        except Exception as e:
            pprint(e)
            return rows
        finally:
            if self.__con:
                self.__con.close()

    # 更新数据库:新增、修改
    def updateTableData(self, sql):
        c = self.__con.cursor()
        try:
            c.execute(sql)
            self.__con.commit()
        except Exception as e:
            pprint(e)
        finally:
            if self.__con:
                self.__con.close()


if __name__ == '__main__':
    db = DBOperator('127.0.0.1',
                    3306,
                    'root',
                    'root',
                    'kyd-dev',
                    'utf8')

    sql = 'select * from leaf_alloc'
    pprint(db.getTableData(sql))
    # sql = """
    #   insert into leaf_alloc(biz_tag,max_id,step,description,update_time) values ('test', 111, 111, 'test', '2021-01-07 00:00:00')
    # """
    #
    # db.updateTableData(sql)
